// 1.promise Async 同步和异步，常见的异步：定时器、Ajax
// 异步任务会在同步任务执行完再执行
// console.log('任务1:...同步')
// console.log('任务2:...同步')
// setTimeout(() => { console.log('任务3:...异步') }, 0)
// console.log('任务4:...同步')
// 任务1:...同步
// 任务2:...同步
// 任务4:...同步
// 任务3:...异步

// 1.统一用一个错误处理机制
// const p1 = new Promise((resolve, reject) => {
//     resolve("任务1:成功得到的数据")
//     // reject("失败的信息")
// })
// // console.log(p1)
// p1.then(data => {
//     console.log(data)
//     return new Promise((resolve, reject) => {
//         resolve("任务2:成功得到的数据")
//         // reject("失败的信息")
//     })
// }).then(data => {
//     console.log(data)
// }).catch(err => {
//     console.log(err)
// })

// 2.不同异步任务错误分别处理，下面这种写法会导致第二个prmoise显示undefined，因为第一个promise没有返回值，
// 默认则是成功的
// const p1 = new Promise((resolve, reject) => {
//     // resolve("任务1:成功得到的数据")
//     reject("任务1:失败的信息")
// })
// // console.log(p1)
// p1.then(data => {
//     console.log(data)
//     return new Promise((resolve, reject) => {
//         resolve("任务2:成功得到的数据")
//         // reject("任务2:失败的信息")
//     })
// }, err => {
//     console.log('任务1：失败了')
//     throw new Error("任务1失败了")
// }).then(data => {
//     console.log(data)
// }, err => {
//     console.log('任务2：失败了')
// })

// 3.async await
// 步骤1 准备一个返回promise对象的函数
// function asyncTask() {
//     return new Promise((
//         resolve, reject
//     ) => {
//         // 假装有一些关键代码
//         const isSuccess = true
//         if (isSuccess) {
//             resolve("任务成功的处理结果")
//         } else {
//             reject("任务失败的处理结果")
//         }
//     })
// }
// // 步骤2 为使用await的函数添加async
// async function main() {
//     console.log("123")
//     const data = await asyncTask()
//     console.log(data)
//     console.log("456")
// }
// main()